/*     */ package com.alipay.api.internal.util;
/*     */ 
/*     */ import com.alipay.api.AlipayApiException;
/*     */ import com.alipay.api.internal.util.codec.Base64;
/*     */ import java.io.ByteArrayInputStream;
/*     */ import java.io.ByteArrayOutputStream;
/*     */ import java.io.InputStream;
/*     */ import java.io.InputStreamReader;
/*     */ import java.io.StringWriter;
/*     */ import java.security.KeyFactory;
/*     */ import java.security.PrivateKey;
/*     */ import java.security.PublicKey;
/*     */ import java.security.Signature;
/*     */ import java.security.spec.InvalidKeySpecException;
/*     */ import java.security.spec.PKCS8EncodedKeySpec;
/*     */ import java.security.spec.X509EncodedKeySpec;
/*     */ import java.util.ArrayList;
/*     */ import java.util.Collections;
/*     */ import java.util.List;
/*     */ import java.util.Map;
/*     */ import java.util.TreeMap;
/*     */ import javax.crypto.Cipher;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class AlipaySignature
/*     */ {
/*     */   private static final int MAX_ENCRYPT_BLOCK = 117;
/*     */   private static final int MAX_DECRYPT_BLOCK = 128;
/*     */   
/*     */   public static String getSignatureContent(RequestParametersHolder requestHolder) {
/*  43 */     return getSignContent(getSortedMap(requestHolder));
/*     */   }
/*     */   
/*     */   public static Map<String, String> getSortedMap(RequestParametersHolder requestHolder) {
/*  47 */     Map<String, String> sortedParams = new TreeMap<String, String>();
/*  48 */     AlipayHashMap appParams = requestHolder.getApplicationParams();
/*  49 */     if (appParams != null && appParams.size() > 0) {
/*  50 */       sortedParams.putAll(appParams);
/*     */     }
/*  52 */     AlipayHashMap protocalMustParams = requestHolder.getProtocalMustParams();
/*  53 */     if (protocalMustParams != null && protocalMustParams.size() > 0) {
/*  54 */       sortedParams.putAll(protocalMustParams);
/*     */     }
/*  56 */     AlipayHashMap protocalOptParams = requestHolder.getProtocalOptParams();
/*  57 */     if (protocalOptParams != null && protocalOptParams.size() > 0) {
/*  58 */       sortedParams.putAll(protocalOptParams);
/*     */     }
/*     */     
/*  61 */     return sortedParams;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String getSignContent(Map<String, String> sortedParams) {
/*  70 */     StringBuffer content = new StringBuffer();
/*  71 */     List<String> keys = new ArrayList<String>(sortedParams.keySet());
/*  72 */     Collections.sort(keys);
/*  73 */     int index = 0;
/*  74 */     for (int i = 0; i < keys.size(); i++) {
/*  75 */       String key = keys.get(i);
/*  76 */       String value = sortedParams.get(key);
/*  77 */       if (StringUtils.areNotEmpty(new String[] { key, value })) {
/*  78 */         content.append(((index == 0) ? "" : "&") + key + "=" + value);
/*  79 */         index++;
/*     */       } 
/*     */     } 
/*  82 */     return content.toString();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String rsaSign(String content, String privateKey, String charset, String signType) throws AlipayApiException {
/*  97 */     if ("RSA".equals(signType))
/*     */     {
/*  99 */       return rsaSign(content, privateKey, charset); } 
/* 100 */     if ("RSA2".equals(signType))
/*     */     {
/* 102 */       return rsa256Sign(content, privateKey, charset);
/*     */     }
/*     */     
/* 105 */     throw new AlipayApiException("Sign Type is Not Support : signType=" + signType);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String rsa256Sign(String content, String privateKey, String charset) throws AlipayApiException {
/*     */     try {
/* 123 */       PrivateKey priKey = getPrivateKeyFromPKCS8("RSA", new ByteArrayInputStream(privateKey
/* 124 */             .getBytes()));
/*     */ 
/*     */       
/* 127 */       Signature signature = Signature.getInstance("SHA256WithRSA");
/*     */       
/* 129 */       signature.initSign(priKey);
/*     */       
/* 131 */       if (StringUtils.isEmpty(charset)) {
/* 132 */         signature.update(content.getBytes());
/*     */       } else {
/* 134 */         signature.update(content.getBytes(charset));
/*     */       } 
/*     */       
/* 137 */       byte[] signed = signature.sign();
/*     */       
/* 139 */       return new String(Base64.encodeBase64(signed));
/* 140 */     } catch (Exception e) {
/* 141 */       throw new AlipayApiException("RSAcontent = " + content + "; charset = " + charset, e);
/*     */     } 
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String rsaSign(String content, String privateKey, String charset) throws AlipayApiException {
/*     */     try {
/* 158 */       PrivateKey priKey = getPrivateKeyFromPKCS8("RSA", new ByteArrayInputStream(privateKey
/* 159 */             .getBytes()));
/*     */ 
/*     */       
/* 162 */       Signature signature = Signature.getInstance("SHA1WithRSA");
/*     */       
/* 164 */       signature.initSign(priKey);
/*     */       
/* 166 */       if (StringUtils.isEmpty(charset)) {
/* 167 */         signature.update(content.getBytes());
/*     */       } else {
/* 169 */         signature.update(content.getBytes(charset));
/*     */       } 
/*     */       
/* 172 */       byte[] signed = signature.sign();
/*     */       
/* 174 */       return new String(Base64.encodeBase64(signed));
/* 175 */     } catch (InvalidKeySpecException ie) {
/* 176 */       throw new AlipayApiException("RSA私钥格式不正确，请检查是否正确配置了PKCS8格式的私钥", ie);
/* 177 */     } catch (Exception e) {
/* 178 */       throw new AlipayApiException("RSAcontent = " + content + "; charset = " + charset, e);
/*     */     } 
/*     */   }
/*     */ 
/*     */   
/*     */   public static String rsaSign(Map<String, String> params, String privateKey, String charset) throws AlipayApiException {
/* 184 */     String signContent = getSignContent(params);
/*     */     
/* 186 */     return rsaSign(signContent, privateKey, charset);
/*     */   }
/*     */ 
/*     */ 
/*     */   
/*     */   public static PrivateKey getPrivateKeyFromPKCS8(String algorithm, InputStream ins) throws Exception {
/* 192 */     if (ins == null || StringUtils.isEmpty(algorithm)) {
/* 193 */       return null;
/*     */     }
/*     */     
/* 196 */     KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
/*     */     
/* 198 */     byte[] encodedKey = StreamUtil.readText(ins).getBytes();
/*     */     
/* 200 */     encodedKey = Base64.decodeBase64(encodedKey);
/*     */     
/* 202 */     return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(encodedKey));
/*     */   }
/*     */   
/*     */   public static String getSignCheckContentV1(Map<String, String> params) {
/* 206 */     if (params == null) {
/* 207 */       return null;
/*     */     }
/*     */     
/* 210 */     params.remove("sign");
/* 211 */     params.remove("sign_type");
/*     */     
/* 213 */     StringBuffer content = new StringBuffer();
/* 214 */     List<String> keys = new ArrayList<String>(params.keySet());
/* 215 */     Collections.sort(keys);
/*     */     
/* 217 */     for (int i = 0; i < keys.size(); i++) {
/* 218 */       String key = keys.get(i);
/* 219 */       String value = params.get(key);
/* 220 */       content.append(((i == 0) ? "" : "&") + key + "=" + value);
/*     */     } 
/*     */     
/* 223 */     return content.toString();
/*     */   }
/*     */   
/*     */   public static String getSignCheckContentV2(Map<String, String> params) {
/* 227 */     if (params == null) {
/* 228 */       return null;
/*     */     }
/*     */     
/* 231 */     params.remove("sign");
/*     */     
/* 233 */     StringBuffer content = new StringBuffer();
/* 234 */     List<String> keys = new ArrayList<String>(params.keySet());
/* 235 */     Collections.sort(keys);
/*     */     
/* 237 */     for (int i = 0; i < keys.size(); i++) {
/* 238 */       String key = keys.get(i);
/* 239 */       String value = params.get(key);
/* 240 */       content.append(((i == 0) ? "" : "&") + key + "=" + value);
/*     */     } 
/*     */     
/* 243 */     return content.toString();
/*     */   }
/*     */ 
/*     */   
/*     */   public static boolean rsaCheckV1(Map<String, String> params, String publicKey, String charset) throws AlipayApiException {
/* 248 */     String sign = params.get("sign");
/* 249 */     String content = getSignCheckContentV1(params);
/*     */     
/* 251 */     return rsaCheckContent(content, sign, publicKey, charset);
/*     */   }
/*     */ 
/*     */   
/*     */   public static boolean rsaCheckV1(Map<String, String> params, String publicKey, String charset, String signType) throws AlipayApiException {
/* 256 */     String sign = params.get("sign");
/* 257 */     String content = getSignCheckContentV1(params);
/*     */     
/* 259 */     return rsaCheck(content, sign, publicKey, charset, signType);
/*     */   }
/*     */ 
/*     */   
/*     */   public static boolean rsaCheckV2(Map<String, String> params, String publicKey, String charset) throws AlipayApiException {
/* 264 */     String sign = params.get("sign");
/* 265 */     String content = getSignCheckContentV2(params);
/*     */     
/* 267 */     return rsaCheckContent(content, sign, publicKey, charset);
/*     */   }
/*     */ 
/*     */   
/*     */   public static boolean rsaCheckV2(Map<String, String> params, String publicKey, String charset, String signType) throws AlipayApiException {
/* 272 */     String sign = params.get("sign");
/* 273 */     String content = getSignCheckContentV2(params);
/*     */     
/* 275 */     return rsaCheck(content, sign, publicKey, charset, signType);
/*     */   }
/*     */ 
/*     */ 
/*     */   
/*     */   public static boolean rsaCheck(String content, String sign, String publicKey, String charset, String signType) throws AlipayApiException {
/* 281 */     if ("RSA".equals(signType))
/*     */     {
/* 283 */       return rsaCheckContent(content, sign, publicKey, charset);
/*     */     }
/* 285 */     if ("RSA2".equals(signType))
/*     */     {
/* 287 */       return rsa256CheckContent(content, sign, publicKey, charset);
/*     */     }
/*     */ 
/*     */     
/* 291 */     throw new AlipayApiException("Sign Type is Not Support : signType=" + signType);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static boolean rsa256CheckContent(String content, String sign, String publicKey, String charset) throws AlipayApiException {
/*     */     try {
/* 299 */       PublicKey pubKey = getPublicKeyFromX509("RSA", new ByteArrayInputStream(publicKey
/* 300 */             .getBytes()));
/*     */ 
/*     */       
/* 303 */       Signature signature = Signature.getInstance("SHA256WithRSA");
/*     */       
/* 305 */       signature.initVerify(pubKey);
/*     */       
/* 307 */       if (StringUtils.isEmpty(charset)) {
/* 308 */         signature.update(content.getBytes());
/*     */       } else {
/* 310 */         signature.update(content.getBytes(charset));
/*     */       } 
/*     */       
/* 313 */       return signature.verify(Base64.decodeBase64(sign.getBytes()));
/* 314 */     } catch (Exception e) {
/* 315 */       throw new AlipayApiException("RSAcontent = " + content + ",sign=" + sign + ",charset = " + charset, e);
/*     */     } 
/*     */   }
/*     */ 
/*     */ 
/*     */   
/*     */   public static boolean rsaCheckContent(String content, String sign, String publicKey, String charset) throws AlipayApiException {
/*     */     try {
/* 323 */       PublicKey pubKey = getPublicKeyFromX509("RSA", new ByteArrayInputStream(publicKey
/* 324 */             .getBytes()));
/*     */ 
/*     */       
/* 327 */       Signature signature = Signature.getInstance("SHA1WithRSA");
/*     */       
/* 329 */       signature.initVerify(pubKey);
/*     */       
/* 331 */       if (StringUtils.isEmpty(charset)) {
/* 332 */         signature.update(content.getBytes());
/*     */       } else {
/* 334 */         signature.update(content.getBytes(charset));
/*     */       } 
/*     */       
/* 337 */       return signature.verify(Base64.decodeBase64(sign.getBytes()));
/* 338 */     } catch (Exception e) {
/* 339 */       throw new AlipayApiException("RSAcontent = " + content + ",sign=" + sign + ",charset = " + charset, e);
/*     */     } 
/*     */   }
/*     */ 
/*     */ 
/*     */   
/*     */   public static PublicKey getPublicKeyFromX509(String algorithm, InputStream ins) throws Exception {
/* 346 */     KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
/*     */     
/* 348 */     StringWriter writer = new StringWriter();
/* 349 */     StreamUtil.io(new InputStreamReader(ins), writer);
/*     */     
/* 351 */     byte[] encodedKey = writer.toString().getBytes();
/*     */     
/* 353 */     encodedKey = Base64.decodeBase64(encodedKey);
/*     */     
/* 355 */     return keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String checkSignAndDecrypt(Map<String, String> params, String alipayPublicKey, String cusPrivateKey, boolean isCheckSign, boolean isDecrypt) throws AlipayApiException {
/* 381 */     String charset = params.get("charset");
/* 382 */     String bizContent = params.get("biz_content");
/* 383 */     if (isCheckSign && 
/* 384 */       !rsaCheckV2(params, alipayPublicKey, charset)) {
/* 385 */       throw new AlipayApiException("rsaCheck failure:rsaParams=" + params);
/*     */     }
/*     */ 
/*     */     
/* 389 */     if (isDecrypt) {
/* 390 */       return rsaDecrypt(bizContent, cusPrivateKey, charset);
/*     */     }
/*     */     
/* 393 */     return bizContent;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String checkSignAndDecrypt(Map<String, String> params, String alipayPublicKey, String cusPrivateKey, boolean isCheckSign, boolean isDecrypt, String signType) throws AlipayApiException {
/* 419 */     String charset = params.get("charset");
/* 420 */     String bizContent = params.get("biz_content");
/* 421 */     if (isCheckSign && 
/* 422 */       !rsaCheckV2(params, alipayPublicKey, charset, signType)) {
/* 423 */       throw new AlipayApiException("rsaCheck failure:rsaParams=" + params);
/*     */     }
/*     */ 
/*     */     
/* 427 */     if (isDecrypt) {
/* 428 */       return rsaDecrypt(bizContent, cusPrivateKey, charset);
/*     */     }
/*     */     
/* 431 */     return bizContent;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String encryptAndSign(String bizContent, String alipayPublicKey, String cusPrivateKey, String charset, boolean isEncrypt, boolean isSign) throws AlipayApiException {
/* 458 */     StringBuilder sb = new StringBuilder();
/* 459 */     if (StringUtils.isEmpty(charset)) {
/* 460 */       charset = "GBK";
/*     */     }
/* 462 */     sb.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>");
/* 463 */     if (isEncrypt) {
/* 464 */       sb.append("<alipay>");
/* 465 */       String encrypted = rsaEncrypt(bizContent, alipayPublicKey, charset);
/* 466 */       sb.append("<response>" + encrypted + "</response>");
/* 467 */       sb.append("<encryption_type>RSA</encryption_type>");
/* 468 */       if (isSign) {
/* 469 */         String sign = rsaSign(encrypted, cusPrivateKey, charset);
/* 470 */         sb.append("<sign>" + sign + "</sign>");
/* 471 */         sb.append("<sign_type>RSA</sign_type>");
/*     */       } 
/* 473 */       sb.append("</alipay>");
/* 474 */     } else if (isSign) {
/* 475 */       sb.append("<alipay>");
/* 476 */       sb.append("<response>" + bizContent + "</response>");
/* 477 */       String sign = rsaSign(bizContent, cusPrivateKey, charset);
/* 478 */       sb.append("<sign>" + sign + "</sign>");
/* 479 */       sb.append("<sign_type>RSA</sign_type>");
/* 480 */       sb.append("</alipay>");
/*     */     } else {
/* 482 */       sb.append(bizContent);
/*     */     } 
/* 484 */     return sb.toString();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String encryptAndSign(String bizContent, String alipayPublicKey, String cusPrivateKey, String charset, boolean isEncrypt, boolean isSign, String signType) throws AlipayApiException {
/* 511 */     StringBuilder sb = new StringBuilder();
/* 512 */     if (StringUtils.isEmpty(charset)) {
/* 513 */       charset = "GBK";
/*     */     }
/* 515 */     sb.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>");
/* 516 */     if (isEncrypt) {
/* 517 */       sb.append("<alipay>");
/* 518 */       String encrypted = rsaEncrypt(bizContent, alipayPublicKey, charset);
/* 519 */       sb.append("<response>" + encrypted + "</response>");
/* 520 */       sb.append("<encryption_type>RSA</encryption_type>");
/* 521 */       if (isSign) {
/* 522 */         String sign = rsaSign(encrypted, cusPrivateKey, charset, signType);
/* 523 */         sb.append("<sign>" + sign + "</sign>");
/* 524 */         sb.append("<sign_type>");
/* 525 */         sb.append(signType);
/* 526 */         sb.append("</sign_type>");
/*     */       } 
/* 528 */       sb.append("</alipay>");
/* 529 */     } else if (isSign) {
/* 530 */       sb.append("<alipay>");
/* 531 */       sb.append("<response>" + bizContent + "</response>");
/* 532 */       String sign = rsaSign(bizContent, cusPrivateKey, charset, signType);
/* 533 */       sb.append("<sign>" + sign + "</sign>");
/* 534 */       sb.append("<sign_type>");
/* 535 */       sb.append(signType);
/* 536 */       sb.append("</sign_type>");
/* 537 */       sb.append("</alipay>");
/*     */     } else {
/* 539 */       sb.append(bizContent);
/*     */     } 
/* 541 */     return sb.toString();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String rsaEncrypt(String content, String publicKey, String charset) throws AlipayApiException {
/*     */     try {
/* 556 */       PublicKey pubKey = getPublicKeyFromX509("RSA", new ByteArrayInputStream(publicKey
/* 557 */             .getBytes()));
/* 558 */       Cipher cipher = Cipher.getInstance("RSA");
/* 559 */       cipher.init(1, pubKey);
/*     */       
/* 561 */       byte[] data = StringUtils.isEmpty(charset) ? content.getBytes() : content.getBytes(charset);
/* 562 */       int inputLen = data.length;
/* 563 */       ByteArrayOutputStream out = new ByteArrayOutputStream();
/* 564 */       int offSet = 0;
/*     */       
/* 566 */       int i = 0;
/*     */       
/* 568 */       while (inputLen - offSet > 0) {
/* 569 */         byte[] cache; if (inputLen - offSet > 117) {
/* 570 */           cache = cipher.doFinal(data, offSet, 117);
/*     */         } else {
/* 572 */           cache = cipher.doFinal(data, offSet, inputLen - offSet);
/*     */         } 
/* 574 */         out.write(cache, 0, cache.length);
/* 575 */         i++;
/* 576 */         offSet = i * 117;
/*     */       } 
/* 578 */       byte[] encryptedData = Base64.encodeBase64(out.toByteArray());
/* 579 */       out.close();
/*     */       
/* 581 */       return StringUtils.isEmpty(charset) ? new String(encryptedData) : new String(encryptedData, charset);
/*     */     }
/* 583 */     catch (Exception e) {
/* 584 */       throw new AlipayApiException("EncryptContent = " + content + ",charset = " + charset, e);
/*     */     } 
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String rsaDecrypt(String content, String privateKey, String charset) throws AlipayApiException {
/*     */     try {
/* 601 */       PrivateKey priKey = getPrivateKeyFromPKCS8("RSA", new ByteArrayInputStream(privateKey
/* 602 */             .getBytes()));
/* 603 */       Cipher cipher = Cipher.getInstance("RSA");
/* 604 */       cipher.init(2, priKey);
/*     */ 
/*     */       
/* 607 */       byte[] encryptedData = StringUtils.isEmpty(charset) ? Base64.decodeBase64(content.getBytes()) : Base64.decodeBase64(content.getBytes(charset));
/* 608 */       int inputLen = encryptedData.length;
/* 609 */       ByteArrayOutputStream out = new ByteArrayOutputStream();
/* 610 */       int offSet = 0;
/*     */       
/* 612 */       int i = 0;
/*     */       
/* 614 */       while (inputLen - offSet > 0) {
/* 615 */         byte[] cache; if (inputLen - offSet > 128) {
/* 616 */           cache = cipher.doFinal(encryptedData, offSet, 128);
/*     */         } else {
/* 618 */           cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
/*     */         } 
/* 620 */         out.write(cache, 0, cache.length);
/* 621 */         i++;
/* 622 */         offSet = i * 128;
/*     */       } 
/* 624 */       byte[] decryptedData = out.toByteArray();
/* 625 */       out.close();
/*     */       
/* 627 */       return StringUtils.isEmpty(charset) ? new String(decryptedData) : new String(decryptedData, charset);
/*     */     }
/* 629 */     catch (Exception e) {
/* 630 */       throw new AlipayApiException("EncodeContent = " + content + ",charset = " + charset, e);
/*     */     } 
/*     */   }
/*     */ }


/* Location:              C:\Users\Administrator\Downloads\jd-gui-windows-1.6.6\jd-gui-windows-1.6.6\alipay-sdk-1.1.jar!\com\alipay\api\interna\\util\AlipaySignature.class
 * Java compiler version: 5 (49.0)
 * JD-Core Version:       1.1.3
 */